package com.designpattern.BuilderPattern;

/**
 * @Author yp
 * @Date 2021-06-04
 * @Description 建造者模式——测试类
 **/

public class Test {
    public static void main(String[] args) {

        //套餐A
        MealA a = new MealA();
        //准备套餐A的服务员
        KFCWaiter waiter = new KFCWaiter(a);
        //获得套餐
        Meal mealA = waiter.construct();
        System.out.print("套餐A的组成部分:");
        System.out.println("食物："+mealA.getFood()+"；   "+"饮品："+mealA.getDrink());
    }
}


/**
 * Director（指挥者）
 * 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象，它主要有两个作用。
 * 一是：隔离了客户与对象的生产过程。
 * 二是：负责控制产品对象的生产过程。
 */
class KFCWaiter {
    private MealBuilder mealBuilder;

    public KFCWaiter(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }


    public Meal construct() {
        //准备食物
        mealBuilder.buildFood();
        //准备饮料
        mealBuilder.buildDrink();

        //准备完毕，返回一个完整的套餐给客户
        return mealBuilder.getMeal();
    }
}